2023/12/231457字符

装饰器

  • 为某些属性、类、方法、参数提供元数据信息
  • 类装饰器本质是一个函数,该函数接收一个参数,表示类本身(构造函数本身)

类装饰器

function test (target: new () => object) {
    return class B {}
}

@test
class A {}
const a = new A();

console.log(a);  //--> B {}
type constructor = new (...args: any[]) => object;
function d1 (target: constructor) {
    console.log('d1');
}
function d2 (target: constructor) {
    console.log('d2');
}

@d1
@d2
class A {
    prop: string
}
//--> d2 d1  // 装饰器运行顺序,从下至上
type constructor = new (...args: any[]) => object;

function test(str: string) {
    return function (target: constructor) {
        console.log(target);
    }
}

@test('name')  // 装饰器传参
class A {}

成员装饰器

function enumerable(target: any, key: string, descriptor: PropertyDescriptor) {
    // console.log(target, key, descriptor)
    descriptor.enumerable = true;
}

class A {
    @enumerable
    fn() {}
}

参数装饰器

function test(target: any, method: string, index: number) {
  console.log(target, method, index);
}

class A {
    sum(a: number, @test b: number) {
      return a + b;
    }
}
  • reflect-metadata
  • class-validator
  • class-transformer